function MaxSortedDistance() {}

MaxSortedDistance.getMaxSortedDistance = function(array){
    //1.得到数列的最大值和最小值
    var max = array[0];
    var min = array[0];
    for(var i=1; i<array.length; i++) {
        if(array[i] > max) {
            max = array[i];
        }
        if(array[i] < min) {
            min = array[i];
        }
    }
    var d = max - min;
    //如果max和min相等，说明数组所有元素都相等，返回0
    if(d == 0){
        return 0;
    }

    //2.初始化桶
    var bucketNum = array.length;
    var buckets = new Array(bucketNum);
    for(var i = 0; i < bucketNum; i++){
        buckets[i] = new Bucket();
    }

    //3.遍历原始数组，确定每个桶的最大最小值
    for(var i = 0; i < array.length; i++){
        //确定数组元素所归属的桶下标
        var index = Math.floor((array[i] - min)  * (bucketNum-1) / d);
        if(buckets[index].min==null || buckets[index].min>array[i]){
            buckets[index].min = array[i];
        }
        if(buckets[index].max==null || buckets[index].max<array[i]){
            buckets[index].max = array[i];
        }
    }

    //4.遍历桶，找到最大差值
    var leftMax = buckets[0].max;
    var maxDistance = 0;
    for (var i=1; i<buckets.length; i++) {
        if (buckets[i].min == null) {
            continue;
        }
        if (buckets[i].min - leftMax > maxDistance) {
            maxDistance = buckets[i].min - leftMax;
        }
        leftMax = buckets[i].max;
    }

    return maxDistance;
}

/**
 * 桶
 */
function Bucket() {
    this.min = null;
    this.max = null;
}

var array = new Array(2,6,3,4,5,10,9);
console.log(MaxSortedDistance.getMaxSortedDistance(array));